#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../common_defs.h"
#include "../lexer/c_lexer.h"
#include "../vm/c_vm.h"
#include "parser.h"

// 简单的测试程序，用于测试解析器功能
int main(int argc, char **argv) {
    char *source_code;
    
    vm_argc = 0;
    vm_argv = NULL;

    if (argc < 2) {
        printf("Usage: %s <source_file>\n", argv[0]);
        return 1;
    }
    
    // 读取源文件
    FILE *file = fopen(argv[1], "r");
    if (!file) {
        printf("Error: Cannot open file %s\n", argv[1]);
        return 1;
    }
    
    // 获取文件大小
    fseek(file, 0, SEEK_END);
    long file_size = ftell(file);
    fseek(file, 0, SEEK_SET);
    
    // 分配内存并读取文件内容
    source_code = (char *)malloc(file_size + 1);
    if (!source_code) {
        printf("Error: Memory allocation failed\n");
        fclose(file);
        return 1;
    }
    
    size_t read_size = fread(source_code, 1, file_size, file);
    fclose(file);
    
    source_code[read_size] = '\0';
    
    // 初始化词法分析器和解析器
    init_lexer(source_code);
    init_parser();
  
    // 解析程序
    printf("Starting parsing...\n");
    parse_program();
    
    
    print_symbol_total(NULL);
    

    // 清理解析器资源（释放符号表和作用域栈）
    cleanup_parser();
    
    // 释放源代码内存
    free(source_code);
    
    return 0;
} 